/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Controladores;
import Beans.Empleado;
import java.io.*;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;


/**
 *
 * @author Ryodans
 */
public class MEmpleado {

    private List<Empleado> listaEmpleado = new LinkedList<Empleado>(); //creacion de la lista
     File archivo=new File("Empleados.dat");
     Empleado cl = new Empleado(); //creacion de una instancia de Empleado
    public void grabar() throws IOException {

      FileOutputStream   flujoSalida  = new FileOutputStream(archivo);
      ObjectOutputStream objetoSalida = new ObjectOutputStream(flujoSalida);
      objetoSalida.writeObject(this.getListaEmpleado());
      objetoSalida.close();
     }

    public void restaurar() throws IOException,ClassNotFoundException {
        if(archivo.exists()==true){
            FileInputStream flujoEntrada    = new FileInputStream(archivo);
  	    ObjectInputStream objetoEntrada = new ObjectInputStream(flujoEntrada);
  	    List<Empleado> lcl = (List) objetoEntrada.readObject();
            this.setListaEmpleado(lcl);
            objetoEntrada.close();
        }
    }

    public List<Empleado> getListaEmpleado() {
        return listaEmpleado;
    }

    public void setListaEmpleado(List<Empleado> listaEmpleado) {
        this.listaEmpleado = listaEmpleado;
    }



  //Metodos (cruds)

    public boolean Existe(String ced){
        boolean con=false;
        Iterator itc=listaEmpleado.iterator();
           while(itc.hasNext()){
              cl=(Empleado)itc.next();
              if(cl.getCedula().equals(ced)){
                    con=true;
                }
            }
           return con;
        } //verificacion de la existencia
    public int GenerarCodigo(){
        int codigo=0;
        if(getListaEmpleado().size()>=0){
            codigo = getListaEmpleado().size()+1;
        }else{
            codigo=0;
        }

        return codigo;

    }

    public void Registrar(Empleado cl){
        if(!Existe(cl.getCedula())){
            cl.setCodigo(getListaEmpleado().size()+"");
            listaEmpleado.add(cl);
            JOptionPane.showMessageDialog(null,"EL Empleado se ha registrado correctamente");
        }
        try {
            this.grabar();
        } catch (IOException ex) {
            Logger.getLogger(MEmpleado.class.getName()).log(Level.SEVERE, null, ex);
        }
    } // registrar Empleado


      public int Posicion(String codi){
          Iterator itc=getListaEmpleado().iterator();
          int pos=-1;
          int ind=-1;
         while(itc.hasNext()){
             cl = (Empleado)itc.next();
            if(cl.getCodigo().equals(codi)){
                ind=ind+1;
                 pos=ind;
            }else{
                ind=ind+1;
            }
         }
          return pos;
    }

    public Empleado Consultar(String ced){
        Iterator itc=listaEmpleado.iterator();
         while(itc.hasNext()){
            Empleado cli= (Empleado)itc.next();
            if(cli.getCedula().equals(ced)){
               return cli;
            }
         }
         return new Empleado();
    } //Consultar Empleado

    public Empleado ConsultarString(String nombre){
         Iterator ita = getListaEmpleado().iterator();
            while(ita.hasNext()){
               cl = (Empleado)ita.next();
               if(cl.getNombre().equals(nombre)){
                   return cl;
               }
        }
        return new Empleado();
    }

   public void Eliminar(String identificacion){
       try{
            Iterator itc=listaEmpleado.iterator();
            while(itc.hasNext()){
            cl=(Empleado)itc.next();
            if(cl.getCedula().equals(identificacion)){
               getListaEmpleado().remove(cl);
                    try {
                        this.grabar();
                    } catch (IOException ex) {
                        Logger.getLogger(MEmpleado.class.getName()).log(Level.SEVERE, null, ex);
                    }
               JOptionPane.showMessageDialog(null,"Eliminado");
            }
        }
       }catch(ConcurrentModificationException e){

       }

    } //Eliminar un Empleado

    public void Modificar(int posi,String identificacion,Empleado cli){
        Iterator itc=listaEmpleado.iterator();
         while(itc.hasNext()){
            cl = (Empleado)itc.next();
            if(cl.getCedula().equals(identificacion)){
                listaEmpleado.set(posi, cli);
                JOptionPane.showMessageDialog(null,"Los Datos se Guardaron "
                                                 + "Satisfactoriamente");
            }
        }
        } //Modificar un Empleado


     public Empleado Recorrer(){
         Iterator it = listaEmpleado.iterator();
         while(it.hasNext()){
             Empleado cli = (Empleado)it.next();
             return cli;
         }
         return new Empleado();
     }

}
